]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
st/viewport: Don't trigger relayout when picking
authorJonas Ådahl <jadahl@gmail.com>
Wed, 9 Dec 2020 18:02:55 +0000 (19:02 +0100)
committerJonas Ådahl <jadahl@gmail.com>
Wed, 9 Dec 2020 21:09:39 +0000 (22:09 +0100)
Calling clutter_actor_get_allocation_box() might still implicitly
trigger a full relayout, which has many side effects not expected to
occur during picking. Avoid a particular case which caused a reentry
issue by using the current allocation instead of forcing a relayout when
picking in StViewport.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/1436
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1527>

src/st/st-viewport.c

index 3ed2d89e13199a150e1c229e18c8581c885d9c1b..c663ae4cd311db9143a84c43ae6b52e51c958ca8 100644 (file)
@@ -431,7 +431,7 @@ st_viewport_pick (ClutterActor       *actor,
   StViewportPrivate *priv = st_viewport_get_instance_private (viewport);
   StThemeNode *theme_node = st_widget_get_theme_node (ST_WIDGET (actor));
   double x, y;
-  ClutterActorBox allocation_box;
+  g_autoptr (ClutterActorBox) allocation_box = NULL;
   ClutterActorBox content_box;
   ClutterActor *child;
 
@@ -440,8 +440,8 @@ st_viewport_pick (ClutterActor       *actor,
   if (clutter_actor_get_n_children (actor) == 0)
     return;
 
-  clutter_actor_get_allocation_box (actor, &allocation_box);
-  st_theme_node_get_content_box (theme_node, &allocation_box, &content_box);
+  g_object_get (actor, "allocation", &allocation_box, NULL);
+  st_theme_node_get_content_box (theme_node, allocation_box, &content_box);
 
   get_border_paint_offsets (viewport, &x, &y);